/*
自己选择的路 ,跪着也要走完。朋友们 , 虽然这个世界日益浮躁起来,只
要能够为了当时纯粹的梦想和感动坚持努力下去 , 不管其它人怎么样,我
们也能够保持自己的本色走下去。
To the world , you will be a person , but to a person , you
will be the world .                               ——AKPower
*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
const ll maxn=510;
ll dp[maxn];
// ll dp[maxn][maxn];
ll a[maxn],b[maxn];
ll pre[maxn];
// ll pre[maxn][maxn];

void print(ll pos,bool flag){
    if(pos<=0)return ;
    print(pre[pos],flag&&false);
    cout<<b[pos];
    if(!flag)cout<<" ";
    return ;
}

int main()
{
    // IOS;
    ll n,m;
    cin>>m;
    // ll maxn_id=0,val_id=0;
    for(ll i=1;i<=m;i++){
        cin>>b[i];
    }
    cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
    }
    // cin>>m;
    // // ll maxn_id=0,val_id=0;
    // for(ll i=1;i<=m;i++){
    //     cin>>b[i];
    // }
    // a[0]=b[0]=-INF;
    for(ll i=1;i<=n;i++){
        ll pos=0;
        for(ll j=1;j<=m;j++){
            if(a[i]==b[j]){
                dp[j]=dp[pos]+1;
                pre[j]=pos;
            }
            if(a[i]>b[j]&&dp[pos]<dp[j]){
                pos=j;
            }
        }
    }
    ll pos=0;
    for(ll i=1;i<=m;i++){
        if(dp[pos]<dp[i]){
            pos=i;
        }
    }
    cout<<dp[pos]<<endl;
    print(pos,true);
    cout<<endl;
    // for(ll i=1;i<=n;i++){
    //     for(ll j=1;j<=m;j++){
    //         pre[i][j]=0;
    //     }
    // }
    // ll ans=0;
    // for(ll i=1;i<=n;i++){
    //     ll val=0;
    //     for(ll j=1;j<=m;j++){
    //         if(a[i]==b[j]){dp[i][j]=val+1;pre[i][j]=val_id;}
    //         else {
    //             dp[i][j]=dp[i-1][j];
    //         }
    //         if(b[j]<a[i])
    //         {
    //             val_id=j;
    //             val=max(val,dp[i-1][j]);
    //         }
    //         // ans=max(ans,dp[i][j]);
    //     }
    // }
    // cout<<ans<<endl;
    // getchar();
    // getchar();
    return 0;
}
// 5
// 4 3 2 1 3
// 5
// 2 3 5 2 4
// 5
// -2147483648 0 2 5 2147483647
// 3
// -2147483648 2147483647 5